package com.apobates.jforum.grief.aurl.utils;

import java.util.Objects;

/**
 * 通用的三元组
 * @param left 左参数
 * @param middle 中间参数
 * @param right 右参数
 * @param <L> 左参类型
 * @param <M> 中间参数类型
 * @param <R> 右参数类型
 */
public record Tuple<L,M,R>(L left, M middle, R right) {
    /**
     * 实例化. 要求所有参数不能是null
     * @param left 左参数
     * @param middle 中间参数
     * @param right 右参数
     * @return
     * @param <L> 左参类型
     * @param <M> 中间参数类型
     * @param <R> 右参数类型
     */
    public static<L,M,R> Tuple of(L left, M middle, R right){
        L l = Objects.requireNonNull(left);
        M m = Objects.requireNonNull(middle);
        R r = Objects.requireNonNull(right);
        return new Tuple(l, m, r);
    }
}
